initial commit
This commit is contained in:
		
						commit
						76d17d0a04
					
				
							
								
								
									
										1678
									
								
								program/image.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1678
									
								
								program/image.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										84
									
								
								program/maorduino.ino
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								program/maorduino.ino
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,84 @@ | |||||||
|  | #include <Arduino_MKRIoTCarrier.h> | ||||||
|  | MKRIoTCarrier carrier; | ||||||
|  | 
 | ||||||
|  | #define MAX_INT 4 // (så kan den bruges som pi)
 | ||||||
|  | #define SIZE 120 | ||||||
|  | #include "pitches.h" | ||||||
|  | #include "image.c" | ||||||
|  | 
 | ||||||
|  | void setup() { | ||||||
|  |   Serial.begin(9600); | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |   carrier.begin(); | ||||||
|  |   carrier.display.fillScreen(ST77XX_BLACK); // Start med en ren skærm
 | ||||||
|  |   Serial.println("start"); | ||||||
|  | 
 | ||||||
|  |   int red_sun_in_the_sky[] = { | ||||||
|  |   NOTE_D6, NOTE_D6, NOTE_D6, NOTE_D6, NOTE_D6, NOTE_F6, NOTE_D6, NOTE_AS5,  | ||||||
|  |   NOTE_G5, NOTE_F5, NOTE_G5, NOTE_D6, NOTE_AS5, NOTE_D6, NOTE_AS5, NOTE_G5, NOTE_G5,  | ||||||
|  |   NOTE_F5, NOTE_G5, NOTE_AS5, NOTE_D6, NOTE_AS5, | ||||||
|  |   NOTE_G5, NOTE_F5, NOTE_G5, NOTE_AS5, NOTE_D5, NOTE_F5, NOTE_G5, | ||||||
|  |   NOTE_AS5, NOTE_G5, NOTE_AS5,  NOTE_G5, | ||||||
|  | NOTE_AS5, NOTE_G5,  NOTE_AS5, NOTE_F6, NOTE_D6, NOTE_D6, 0, | ||||||
|  | NOTE_AS5, NOTE_G5, NOTE_AS5, NOTE_D6, NOTE_D6, NOTE_F6, | ||||||
|  | NOTE_D6, NOTE_AS5, NOTE_G5, NOTE_G5, 0 | ||||||
|  |   }; | ||||||
|  |   int bpm = 139; | ||||||
|  |    | ||||||
|  |   int noteDurations[] = { | ||||||
|  |   3, 1, 2, 2, 2, 2, 2, 2, | ||||||
|  |   3, 1, 2, 2, 2, 2, 2, 2, 2, | ||||||
|  |   1, 3, 2, 2, 4, 4, | ||||||
|  |   2.5, 4, 2.5, 4, 2.5, | ||||||
|  |   4,4,4,4, | ||||||
|  | 2,2,2,2,2,2,4, | ||||||
|  | 2,4,2,2,4,2, | ||||||
|  | 4,4,2,2,4 | ||||||
|  | 
 | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  |   for (int note_idx = 0; note_idx < sizeof(noteDurations) / sizeof(int); note_idx++) { | ||||||
|  | 
 | ||||||
|  |     // to calculate the note duration, take one second divided by the note type.
 | ||||||
|  |     //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
 | ||||||
|  |     int noteDuration = noteDurations[note_idx]/(139*8.0)*60*1000; | ||||||
|  |     Serial.println(noteDuration); | ||||||
|  |     carrier.Buzzer.sound(red_sun_in_the_sky[note_idx]); | ||||||
|  |     // to distinguish the notes, set a minimum time between them.
 | ||||||
|  |     // the note's duration + 30% seems to work well:
 | ||||||
|  |     delay(noteDuration); | ||||||
|  |     // stop the tone playing:
 | ||||||
|  |     carrier.Buzzer.noSound(); | ||||||
|  |     delay(noteDuration); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | inline int color_u8_to_u6(int v) { | ||||||
|  |   const double conversion_ratio = 63.0 / 255.0; | ||||||
|  |   return (int)(v * conversion_ratio);   | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | inline int color_u8_to_u5(int v) { | ||||||
|  |   const double conversion_ratio = 31.0 / 255.0; | ||||||
|  |   return (int)(v * conversion_ratio);   | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void loop() { | ||||||
|  |   Serial.println(":3"); | ||||||
|  |   for (int x = 0; x < SIZE; x++) { | ||||||
|  |     for (int y = 0; y < SIZE; y++) { | ||||||
|  |       int idx = 3 * (y * SIZE + x); | ||||||
|  |       // for some reason
 | ||||||
|  |       // red = 5 bytes
 | ||||||
|  |       // green = 6 bytes
 | ||||||
|  |       // blue = 5 bytes
 | ||||||
|  |       int r = (int)gimp_image[idx] & 0xFF; | ||||||
|  |       int g = (int)gimp_image[idx + 1] & 0xFF; | ||||||
|  |       int b = (int)gimp_image[idx + 2] & 0xFF; | ||||||
|  |       int color = (color_u8_to_u5(r) << 11) | (color_u8_to_u6(g) << 5) | color_u8_to_u5(b); | ||||||
|  |       carrier.display.fillRect(x * 2, y * 2, 2, 2, color);      | ||||||
|  |     }   | ||||||
|  |   } | ||||||
|  |   delay(2500); // Vent lidt før næste måling
 | ||||||
|  | } | ||||||
							
								
								
									
										90
									
								
								program/pitches.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								program/pitches.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,90 @@ | |||||||
|  | 
 | ||||||
|  | #define NOTE_B0  31 | ||||||
|  | #define NOTE_C1  33 | ||||||
|  | #define NOTE_CS1 35 | ||||||
|  | #define NOTE_D1  37 | ||||||
|  | #define NOTE_DS1 39 | ||||||
|  | #define NOTE_E1  41 | ||||||
|  | #define NOTE_F1  44 | ||||||
|  | #define NOTE_FS1 46 | ||||||
|  | #define NOTE_G1  49 | ||||||
|  | #define NOTE_GS1 52 | ||||||
|  | #define NOTE_A1  55 | ||||||
|  | #define NOTE_AS1 58 | ||||||
|  | #define NOTE_B1  62 | ||||||
|  | #define NOTE_C2  65 | ||||||
|  | #define NOTE_CS2 69 | ||||||
|  | #define NOTE_D2  73 | ||||||
|  | #define NOTE_DS2 78 | ||||||
|  | #define NOTE_E2  82 | ||||||
|  | #define NOTE_F2  87 | ||||||
|  | #define NOTE_FS2 93 | ||||||
|  | #define NOTE_G2  98 | ||||||
|  | #define NOTE_GS2 104 | ||||||
|  | #define NOTE_A2  110 | ||||||
|  | #define NOTE_AS2 117 | ||||||
|  | #define NOTE_B2  123 | ||||||
|  | #define NOTE_C3  131 | ||||||
|  | #define NOTE_CS3 139 | ||||||
|  | #define NOTE_D3  147 | ||||||
|  | #define NOTE_DS3 156 | ||||||
|  | #define NOTE_E3  165 | ||||||
|  | #define NOTE_F3  175 | ||||||
|  | #define NOTE_FS3 185 | ||||||
|  | #define NOTE_G3  196 | ||||||
|  | #define NOTE_GS3 208 | ||||||
|  | #define NOTE_A3  220 | ||||||
|  | #define NOTE_AS3 233 | ||||||
|  | #define NOTE_B3  247 | ||||||
|  | #define NOTE_C4  262 | ||||||
|  | #define NOTE_CS4 277 | ||||||
|  | #define NOTE_D4  294 | ||||||
|  | #define NOTE_DS4 311 | ||||||
|  | #define NOTE_E4  330 | ||||||
|  | #define NOTE_F4  349 | ||||||
|  | #define NOTE_FS4 370 | ||||||
|  | #define NOTE_G4  392 | ||||||
|  | #define NOTE_GS4 415 | ||||||
|  | #define NOTE_A4  440 | ||||||
|  | #define NOTE_AS4 466 | ||||||
|  | #define NOTE_B4  494 | ||||||
|  | #define NOTE_C5  523 | ||||||
|  | #define NOTE_CS5 554 | ||||||
|  | #define NOTE_D5  587 | ||||||
|  | #define NOTE_DS5 622 | ||||||
|  | #define NOTE_E5  659 | ||||||
|  | #define NOTE_F5  698 | ||||||
|  | #define NOTE_FS5 740 | ||||||
|  | #define NOTE_G5  784 | ||||||
|  | #define NOTE_GS5 831 | ||||||
|  | #define NOTE_A5  880 | ||||||
|  | #define NOTE_AS5 932 | ||||||
|  | #define NOTE_B5  988 | ||||||
|  | #define NOTE_C6  1047 | ||||||
|  | #define NOTE_CS6 1109 | ||||||
|  | #define NOTE_D6  1175 | ||||||
|  | #define NOTE_DS6 1245 | ||||||
|  | #define NOTE_E6  1319 | ||||||
|  | #define NOTE_F6  1397 | ||||||
|  | #define NOTE_FS6 1480 | ||||||
|  | #define NOTE_G6  1568 | ||||||
|  | #define NOTE_GS6 1661 | ||||||
|  | #define NOTE_A6  1760 | ||||||
|  | #define NOTE_AS6 1865 | ||||||
|  | #define NOTE_B6  1976 | ||||||
|  | #define NOTE_C7  2093 | ||||||
|  | #define NOTE_CS7 2217 | ||||||
|  | #define NOTE_D7  2349 | ||||||
|  | #define NOTE_DS7 2489 | ||||||
|  | #define NOTE_E7  2637 | ||||||
|  | #define NOTE_F7  2794 | ||||||
|  | #define NOTE_FS7 2960 | ||||||
|  | #define NOTE_G7  3136 | ||||||
|  | #define NOTE_GS7 3322 | ||||||
|  | #define NOTE_A7  3520 | ||||||
|  | #define NOTE_AS7 3729 | ||||||
|  | #define NOTE_B7  3951 | ||||||
|  | #define NOTE_C8  4186 | ||||||
|  | #define NOTE_CS8 4435 | ||||||
|  | #define NOTE_D8  4699 | ||||||
|  | #define NOTE_DS8 4978 | ||||||
							
								
								
									
										3
									
								
								tools/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								tools/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | |||||||
|  | a.out | ||||||
|  | base_image.c | ||||||
|  | new_image.c | ||||||
							
								
								
									
										36
									
								
								tools/gimp_img_conv/gimp_img_conv.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								tools/gimp_img_conv/gimp_img_conv.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,36 @@ | |||||||
|  | #define SIZE 120 | ||||||
|  | #include <stdint.h> | ||||||
|  | #include <stddef.h> | ||||||
|  | #include <stdio.h> | ||||||
|  | #include "glib.h" | ||||||
|  | #include "base_image.c" | ||||||
|  | 
 | ||||||
|  | int color_u8_to_u6(int v) { | ||||||
|  |     const double conversion_ratio = 63.0 / 255.0; | ||||||
|  |     return (int)(v * conversion_ratio);   | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int color_u8_to_u5(int v) { | ||||||
|  |     const double conversion_ratio = 31.0 / 255.0; | ||||||
|  |     return (int)(v * conversion_ratio);   | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void main() { | ||||||
|  |     printf("static const unsigned short gimp_image[%d] = \"", gimp_image.width * gimp_image.height); | ||||||
|  |     for (int x = 0; x < gimp_image.width; x++) { | ||||||
|  |         for (int y = 0; y < gimp_image.height; y++) { | ||||||
|  |             int idx = 3 * (y * gimp_image.width + x); | ||||||
|  |             // for some reason
 | ||||||
|  |             // red = 5 bytes
 | ||||||
|  |             // green = 6 bytes
 | ||||||
|  |             // blue = 5 bytes
 | ||||||
|  |             int r = (int)gimp_image.pixel_data[idx] & 0xFF; | ||||||
|  |             int g = (int)gimp_image.pixel_data[idx + 1] & 0xFF; | ||||||
|  |             int b = (int)gimp_image.pixel_data[idx + 2] & 0xFF; | ||||||
|  |             uint16_t color = (color_u8_to_u5(r) << 11) | (color_u8_to_u6(g) << 5) | color_u8_to_u5(b); | ||||||
|  |             printf("\\0x%X", color); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     printf("\"\n"); | ||||||
|  | } | ||||||
|  | 
 | ||||||
							
								
								
									
										2
									
								
								tools/gimp_img_conv/glib.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								tools/gimp_img_conv/glib.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,2 @@ | |||||||
|  | typedef unsigned int guint; | ||||||
|  | typedef unsigned char guint8; | ||||||
							
								
								
									
										2
									
								
								tools/gimp_img_conv/run.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								tools/gimp_img_conv/run.sh
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,2 @@ | |||||||
|  | #!/bin/sh | ||||||
|  | gcc gimp_img_conv.c && ./a.out > new_image.c | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user