Number of msgs in Inbox not showing up

. At the top-right of the page (avatar/You/INBOX/.../logout), the number of msgs in my Inbox is no longer displaying. Maybe because I have zero msgs, but it used to tell me that.

Posted by NachoMahma 9 years ago


Hitting Enter in PM Subject field sends msg

. Subject says it all. Can you just reject Enters in the Subject fld?

Posted by NachoMahma 9 years ago


send pictures via pvt msg

Hi i want to send pictures to somone of an amp problem i have need to be on a pack like this is there one these are the pick going to some one called slowpoke if you can help...

Posted by andybuda 8 years ago


Bar prevents log in from web page

The msg title says it all

Posted by lepercan 4 years ago



Either my inbox (msgs) or my Inbox link has a problem...

On each page that has a link to my INBOX, I am showing: INBOX (1)When I click on it, and go to the inbox, the top message is about one day old and I see nothing new. No new PM, so either there is a new one and it is not showing, or there isn't one and the indicator for how many new messages I have in my inbox is wrong.

Posted by Goodhart 10 years ago


Need help with code from Arduino

Hi everyone. Want someone to build me a code for arduino. Its a simple project with GSM included. More info msg me. Thanks

Posted by Bisc 1 year ago


Can someone help me with my game?

I have part of the script written but I do need help with some of the stuff: -Engine -Voices -Art -Music Etc. Msg me if you wanna help :)

Posted by builderkidj 6 years ago


Cannot access pre-existing "non-pro" topic (and captcha not required for PM)

Part 1:I can no longer access this topic:https://www.instructables.com/community/Could-this-be-used-as-a-guitar-amp-or-converted-in/...which I had replied to earlier. It was created by jackillac92 a day or two ago.When clicking on the above URL, it's redirected to:https://www.instructables.com/account/gopro?nxtPgName=/community/Could-this-be-used-as-a-guitar-amp-or-converted-in/&nxtPg;=/community/Could-this-be-used-as-a-guitar-amp-or-converted-in/Part 2:When I sent a PM to jackillac92 to notify him that I could see his msgs but not respond, I was NOT sent through the usual captcha hoop before the msg was sent.

Posted by gmoon 9 years ago


"Invalid formatting" error when inserting link

. When trying to insert a (valid) link to http://en.wikipedia.org/wiki/Executive_order_(United_States) , I get the following error msg:Invalid formatting in the comment.. Getting rid of everything after the "r" cleared it up, so I'm assuming it's the parentheses that trip the error.

Posted by NachoMahma 9 years ago


i logon to find im asked to be Pro .. but...

but my pro membership doesnt expire til October 2, 2011 Other consequences: am forbidden to have 'one page' 'structables .. cant download PDF's ... and it makes me cranky... but reversibly so! but, now, this msg to you is not working .. i 'Preview' but then cant 'submit'.. NO button! sigh jon tkjtkj tkjtkj@gmail.com

Posted by tkjtkj 7 years ago


DC treadmill motors 1.5-3 hp great for hobby, windmill, small EV's

I'm a fitness repair technician, i get some really good motors from time to time. Usually posted to ebay under seller name guaranteed_goods....i have 2 or 3 up at the time of this posting... feel free to msg me with what you are looking for....

Posted by mickeyaaaa 3 years ago


Wanted Arduino code writer (will pay)

Hi friends. I need someone to help me write Arduino code for my project. I will pay 20 US$ for each code you make...will put the money to your paypal account, or if you like can order something for you from EBAY and ship to your address.. please msg me I send you the flowchart and what the code is sopposed to do. Thanks

Posted by goldenshuttle 3 years ago


"Stats" box servlet error

Clicking the Stats tab in any instructable triggers a pretty heavy servlet error (and exception list.) Error msg: ERROR 500: javax.servlet.jsp.JspException: An error occurred while evaluating custom action attribute "value" with value "${stats.TotalHits}": Unable to find a value for "TotalHits" in object of class "com.instructables.model.helper.Stats" using operator "." (null) There were some changes added overnight (book contest navigation, above each entry), which might have contributed...

Posted by gmoon 10 years ago


I cannot get into Etsy- this is a problem!

Everytime I try to get to my store, or even the main page, i get a connection timeout response. But everything else is working fine, i clearly am connected to the internet. I tried upgrading my Firefox, tried deleting my cookies, and nothing works. I really need to do work on my etsy, and this is not helping! Anyone? Thank you! this is the msg- "Connection Interrupted The connection to the server was reset while the page was loading. The network link was interrupted while negotiating a connection. Please try again."

Posted by gildedpeach 10 years ago


Ible delayed posting no longer new.

If you have an ible delayed of being posted for who knows what reason. When it gets posted it gets posted in the spot that it would of been  originally. Example, on 6/1 i published 3 ibles in one day. One posted in 10 minutes. The other 2 posted on 6/4. Now the two late posts do not get put at the top with the new ibles, no it gets put in at the date it was first submitted. My variable voltage supply took 6 days to post. So to find it you have to go through many pages of ibles to locate it. IT does not get posted as the newest ible. I had sent a msg to service@instructables but never did get a real person.    If peoples ibles are delayed for some flagging issue or what ever it would be nice to know what to avoid in the future. I have gotten a tip on some issues that may trip the filters, short keywords, not common or unrecognizable keywords. Such as eek. In msg or forums delays maybe from short question with active links.. These are tips are from someone that has been observing these things and are not a locked in rule.   Altho these are somewhat of gripes it is not anything that will stop me from posting ibles. I realy gain from Instructables. Before i joined here i never heard of Arduino now i am writing small sketches and manipulating larger ones.

Posted by WWC 5 years ago


rca power supply

I was wondering if anyone could post how to make a simple rca power supply for a tattoo machine. Just a plain rca female input like off the game cords, not the guitar amp. it needs only to supply 3-4 volts of power. maybe an old walkman or something? when i have the smallest cutest girly homeade tattoo machine that i want to post but i want to make sure it works properly first, it runs off batteries right now but i want to be able to plug it in. if someone does this project could they msg me when its posted? thanks :)

Posted by Mendalite 9 years ago


Virtualwire RF 433mhz Voltage problem

Hi, i am trying to have it switch a 5v relay on pin 8 receiver side only when pin 2 transmitter side in held down. I have set up a XY-MK 5v transmitter , Push button to pin 2 live when pushed 3.3v Data rf transmitter to pin 4 and 5v,gnd and receiver, data pin 2 5v and gnd led to pin 8 and gnd Here are the codes. Transmitter Code= #include const int button = 2; const int transmit_pin = 4; const int receive_pin = 2; const int transmit_en_pin = 3; void setup() {   // Initialise the IO and ISR   Serial.begin(9600);   vw_set_tx_pin(transmit_pin);   vw_set_rx_pin(receive_pin);   vw_set_ptt_pin(transmit_en_pin);   vw_set_ptt_inverted(true); // Required for DR3100   vw_setup(2000);  // Bits per sec } byte count = 1; void loop() {   char msg[7] = {'h','e','l','l','o',' ','#'};   if     (digitalRead(button) == HIGH)   {Serial.println("on its way");   msg[6] = count;   //digitalWrite(led_pin, HIGH); // Flash a light to show transmitting   vw_send((uint8_t *)msg, 7);   Serial.println("on its way");   vw_wait_tx(); // Wait until the whole message is gone   //digitalWrite(led_pin, LOW);   //delay(1000);   count = count + 1; } } And receiver code = #include const int led_pin = 8; const int transmit_pin = 12; const int receive_pin = 2; const int transmit_en_pin = 3; void setup() {     delay(1000);     Serial.begin(9600); // Debugging only     Serial.println("setup");     // Initialise the IO and ISR     vw_set_tx_pin(transmit_pin);     vw_set_rx_pin(receive_pin);     vw_set_ptt_pin(transmit_en_pin);     vw_set_ptt_inverted(true); // Required for DR3100     vw_setup(2000);  // Bits per sec     vw_rx_start();       // Start the receiver PLL running } void loop() {     uint8_t buf[VW_MAX_MESSAGE_LEN];     uint8_t buflen = VW_MAX_MESSAGE_LEN;     if (vw_get_message(buf, &buflen;)) // Non-blocking     { int i;         digitalWrite(led_pin, HIGH); // Flash a light to show received good message // Message with a good checksum received, print it. Serial.print("Got: "); for (i = 0; i < buflen; i++) {      Serial.print(buf[i], HEX);      Serial.print(' '); } Serial.println();         digitalWrite(led_pin, LOW);     } } I have tried many different codes i have found and this works the best but.........the voltage is only going from 0.20v to 0.40 on the receiver pin 8. i need this to be 5v any ideas?

Posted by Senken 3 years ago


What are all these cookies on Instructables, etc?

I don't know if most people can read their own cookies.Today when I signed on instructables with a clear cache , I got these cookies:consumerist.com SESSID_GANJAconsumerist.com GANJAUSERSETTINGSApparently ganja means smoking pot. Why give me those cookies?Here are some other cookies I think stink.ACIDBASEROLL (< who's being "wicked ... in High places"? Everybody must get stoned?)doubleclick.* (tracking cookie)hitbox.* (tracking cookie)2o7.* (tracking cookie)KIDYMD paypal.com (when I haven't been there)RU4 (are you for... as in RU4 86? what are you for?)test-loyalty (do you like Bush?)lucky# geoinfo (where are you now?)FLASH9 (hidden)I will post more sneaky looking cookies as I get them. I can't remember more now.If anyone is a truthful expert on cookies, share more clues.dttd://CMD MSG 41387 04551.70280 ETX (user defined protocol)

Posted by VIRON 11 years ago


want to display my text on a tft lcd like sony bravia using db9 input

Hello!           i am working on a project.. my last phase is to display the text on any lcd (other the alphanumeric and small mobile lcds) i wish to display my text on sony bravia using its db9 input.. well apart from this lcd i can also display my text on any tft monitor... i just need some help about the circuit to use and how to display.... about my project:                                 my project is that i am getting a sms on my reciving module i-e sony Ericsson t-290 and through a rs-232 data cable my msg is retrieved via at-command into the microcontroller after passing through max 232 converter then it is displayed on the led display.. work to do: now apart from the led display i want to display it on the big tft lcd or tft monitor for that i might need a video circuit consisting of video ic's etc.. i need help in building that.. Thankz

Posted by sani 7 years ago


Chat

Hellow everyone, i kinda run into this site, and this group, and i made an acc as you can see :3 i kinda made a chat today in batch, pretty simple and using Dropbox, but i haz some ideas with powershell and using an FTP. but here is a pic of how it works and the code ofcorse! code client: @echo off SET name=%username% color 0a :main cls echo ############################# echo #welcome to the dropbox chat# echo ############################# echo. echo Make your sellection bellow! echo. echo [1]-Collor menu echo [2]-Chat name echo [3]-Chatroom echo [4]-Info (waar normaal nooit iemand kijkt) echo name: %name% echo. :sellect1 set /p C=Sellection: if "%C%"=="1" goto collor if "%C%"=="2" goto name if "%C%"=="3" goto chat1 if "%C%"=="4" goto info if Else goto main /goto main :chat1 echo %name% just joined the chat>>chat.txt goto chat :collor cls echo ############ echo #COLLORS!!!# echo ############ echo. echo pick a collor echo. echo [1]- White echo [2]- Green echo [3]- Red echo [4]- Purple echo [5]- Blue echo [6]- Yellow echo. echo [0]- Main menu echo. :sellect2 set /p C=Collor: if "%C%"=="1" color F if "%C%"=="2" color A if "%C%"=="3" color C if "%C%"=="4" color D if "%C%"=="5" color B if "%C%"=="6" color E if "%C%"=="0" goto main goto collor :name cls echo ############### echo #create a name# echo ############### echo. echo Type in your name (please dont use spacebar) echo. :sellect3 set /p C=Name: SET name=%C% goto main :chat cls echo ######## echo #-CHAT-# echo ######## echo. echo Every msg you type will be added in the chat.txt file, echo so chek on that file for the chat. echo. :sellect3 set /p C=: echo [%time%] %name%:%C%>>chat.txt if "%C%"=="/clear" goto del if "%C%"=="/afk" echo %name% is currently afk>>chat.txt if "%C%"=="/back" echo %name% is no longer afk>>chat.txt if "%C%"=="porn" echo %name% is a perv>>chat.txt goto chat :del del chat.txt goto chat code reader: @echo off :1 cls type chat.txt PING -n 2 127.0.0.1>nul goto 1 thats a bit it, kinda simple i know, but its fun to use and fun to make, feedback is always welcome! ^__^ have a great day/night bye!

Posted by dwngrt 6 years ago


Cannot access link

Cannot access the following link (from Google): https://www.instructables.com/id/Teach-Yourself-to-Play-Harmonica/ Attempting to do so produces the following error msg: Please excuse me, that was very impolite! - javax.servlet.ServletException: javax.servlet.jsp.JspException: ServletException in '/common/layout_bootstraped.jspx': ServletException in '/pages/explore/type/instructable_content.jsp': java.lang.reflect.InvocationTargetException Exception javax.servlet.jsp.JspException: ServletException in '/common/layout_bootstraped.jspx': ServletException in '/pages/explore/type/instructable_content.jsp': java.lang.reflect.InvocationTargetException at org.apache.tiles.taglib.InsertTag$InsertHandler.doEndTag(InsertTag.java:923) at org.apache.tiles.taglib.InsertTag.doEndTag(InsertTag.java:457) at _jsp._pages._explore._type._instructable__jsp._jspService(_instructable__jsp.java:461) at com.caucho.jsp.JavaPage.service(JavaPage.java:60) at com.caucho.jsp.Page.pageservice(Page.java:570) at com.caucho.server.dispatch.PageFilterChain.doFilter(PageFilterChain.java:179) at com.caucho.server.webapp.DispatchFilterChain.doFilter(DispatchFilterChain.java:115) at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:229) at com.caucho.server.webapp.RequestDispatcherImpl.include(RequestDispatcherImpl.java:485) at com.caucho.server.webapp.RequestDispatcherImpl.include(RequestDispatcherImpl.java:350) at com.instructables.servlet.ActionServlet.sendToJspPage(ActionServlet.java:330) at com.instructables.servlet.ActionServlet.handleResult(ActionServlet.java:247) at com.instructables.servlet.ActionServlet.prepare(ActionServlet.java:205) at com.instructables.servlet.ActionServlet.doGet(ActionServlet.java:90) at javax.servlet.http.HttpServlet.service(HttpServlet.java:115) at javax.servlet.http.HttpServlet.service(HttpServlet.java:92) at com.caucho.server.dispatch.ServletFilterChain.doFilter(ServletFilterChain.java:106) at com.caucho.filters.GzipFilter.doFilter(GzipFilter.java:208) at com.instructables.filter.FilterWrapperFilter.doFilter(FilterWrapperFilter.java:47) at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:70) at com.instructables.filter.HibernateSessionRequestFilter.doFilter(HibernateSessionRequestFilter.java:48) at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:70) at com.instructables.filter.TemporaryProFilter.doFilter(TemporaryProFilter.java:78) at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:70) at com.instructables.filter.TemporaryPasswordFilter.doFilter(TemporaryPasswordFilter.java:46) at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:70) at com.instructables.filter.SecurityFilter.doFilter(SecurityFilter.java:122) at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:70) at com.instructables.filter.SetupFilter.doFilter(SetupFilter.java:71) at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:70) at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:173) at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:229) at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:274) at com.caucho.server.port.TcpConnection.run(TcpConnection.java:514) at com.caucho.util.ThreadPool.runTasks(ThreadPool.java:527) at com.caucho.util.ThreadPool.run(ThreadPool.java:449) at java.lang.Thread.run(Thread.java:595) Caused by: javax.servlet.ServletException: javax.servlet.jsp.JspException: ServletException in '/pages/explore/type/instructable_content.jsp': java.lang.reflect.InvocationTargetException at com.caucho.jsp.PageContextImpl.handlePageException(PageContextImpl.java:1120) at _jsp._common._layout_0bootstraped__jspx._jspService(_layout_0bootstraped__jspx.java:252) at com.caucho.jsp.JavaPage.service(JavaPage.java:60) at com.caucho.jsp.Page.pageservice(Page.java:570) at com.caucho.server.dispatch.PageFilterChain.doFilter(PageFilterChain.java:179) at com.caucho.server.webapp.DispatchFilterChain.doFilter(DispatchFilterChain.java:115) at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:229) at com.caucho.server.webapp.RequestDispatcherImpl.include(RequestDispatcherImpl.java:485) at com.caucho.server.webapp.RequestDispatcherImpl.include(RequestDispatcherImpl.java:350) at com.caucho.jsp.PageContextImpl.include(PageContextImpl.java:933) at com.caucho.jsp.PageContextImpl.include(PageContextImpl.java:870) at org.apache.tiles.TilesUtilImpl.doInclude(TilesUtilImpl.java:143) at org.apache.tiles.TilesUtil.doInclude(TilesUtil.java:149) at org.apache.tiles.taglib.InsertTag.doInclude(InsertTag.java:760) at org.apache.tiles.taglib.InsertTag$InsertHandler.doEndTag(InsertTag.java:892) ... 36 more Caused by: javax.servlet.jsp.JspException: ServletException in '/pages/explore/type/instructable_content.jsp': java.lang.reflect.InvocationTargetException at org.apache.tiles.taglib.InsertTag$InsertHandler.doEndTag(InsertTag.java:923) at org.apache.tiles.taglib.InsertTag.doEndTag(InsertTag.java:457) at _jsp._common._layout_0bootstraped__jspx._jspService(_layout_0bootstraped__jspx.java:210) ... 49 more Caused by: javax.servlet.ServletException: javax.servlet.jsp.el.ELException: java.lang.reflect.InvocationTargetException at com.caucho.jsp.PageContextImpl.handlePageException(PageContextImpl.java:1120) at _jsp._pages._explore._type._instructable_0body_0instructable_0bootstrapped__jsp._jspService(_instructable_0body_0instructable_0bootstrapped__jsp.java:199) at com.caucho.jsp.JavaPage.service(JavaPage.java:60) at com.caucho.jsp.Page.pageservice(Page.java:570) at com.caucho.server.dispatch.PageFilterChain.doFilter(PageFilterChain.java:179) at com.caucho.server.webapp.DispatchFilterChain.doFilter(DispatchFilterChain.java:115) at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:229) at com.caucho.server.webapp.RequestDispatcherImpl.include(RequestDispatcherImpl.java:485) at com.caucho.server.webapp.RequestDispatcherImpl.include(RequestDispatcherImpl.java:350) at com.caucho.jsp.PageContextImpl.include(PageContextImpl.java:933) at _jsp._pages._explore._type._instructable_0body_0bootstrapped__jsp._jspService(_instructable_0body_0bootstrapped__jsp.java:43) at com.caucho.jsp.JavaPage.service(JavaPage.java:60) at com.caucho.jsp.Page.pageservice(Page.java:570) at com.caucho.server.dispatch.PageFilterChain.doFilter(PageFilterChain.java:179) at com.caucho.server.webapp.DispatchFilterChain.doFilter(DispatchFilterChain.java:115) at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:229) at com.caucho.server.webapp.RequestDispatcherImpl.include(RequestDispatcherImpl.java:485) at com.caucho.server.webapp.RequestDispatcherImpl.include(RequestDispatcherImpl.java:350) at com.caucho.jsp.PageContextImpl.include(PageContextImpl.java:933) at _jsp._pages._explore._type._instructable_0content__jsp._jspService(_instructable_0content__jsp.java:32) at com.caucho.jsp.JavaPage.service(JavaPage.java:60) at com.caucho.jsp.Page.pageservice(Page.java:570) at com.caucho.server.dispatch.PageFilterChain.doFilter(PageFilterChain.java:179) at com.caucho.server.webapp.DispatchFilterChain.doFilter(DispatchFilterChain.java:115) at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:229) at com.caucho.server.webapp.RequestDispatcherImpl.include(RequestDispatcherImpl.java:485) at com.caucho.server.webapp.RequestDispatcherImpl.include(RequestDispatcherImpl.java:350) at com.caucho.jsp.PageContextImpl.include(PageContextImpl.java:933) at com.caucho.jsp.PageContextImpl.include(PageContextImpl.java:870) at org.apache.tiles.TilesUtilImpl.doInclude(TilesUtilImpl.java:143) at org.apache.tiles.TilesUtil.doInclude(TilesUtil.java:149) at org.apache.tiles.taglib.InsertTag.doInclude(InsertTag.java:760) at org.apache.tiles.taglib.InsertTag$InsertHandler.doEndTag(InsertTag.java:892) ... 51 more Caused by: javax.servlet.jsp.el.ELException: java.lang.reflect.InvocationTargetException at com.caucho.el.StaticMethodExpr.evalMethod(StaticMethodExpr.java:142) at com.caucho.el.FunctionExpr.evalObject(FunctionExpr.java:71) at _jsp._pages._explore._type._instructable_0body_0instructable_0bootstrapped__jsp._jspService(_instructable_0body_0instructable_0bootstrapped__jsp.java:48) ... 82 more Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.GeneratedMethodAccessor553.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:592) at com.caucho.el.StaticMethodExpr.evalMethod(StaticMethodExpr.java:133) ... 84 more Caused by: java.lang.NullPointerException

Posted by mbhaworth 6 years ago


: Arduino + Adafruit wave sheild + IR + Keypad sound board

Hi , was wondering if you could point me in the right direction I'm very new to Arduino I built last year a simple board with adafruit wave shield and added a simple 12 digit key pad to play 12 sounds + power up I have got the codes for the KEYES IR receiver so know the IR is correctly connected and library loaded im trying to integrate the IR code so can change the sounds by IR remote ideally with option of the buttons (if have to loose the buttons and just use remote that's fine) have copied the code below for how it works now just buttons   I found some code for Cylon Pumpkin that works great with just the remote but would also like to integrate the 12 digit keypad Thank you in advance for any help or pointers you can suggest Richard CODE FOR 12 DIGIT BUTTON PRESS /* ADAVOICE is an Arduino-based voice pitch changer plus WAV playback. Fun for Halloween costumes, comic convention getups and other shenanigans! Hardware requirements: - Arduino Uno, Duemilanove or Diecimila (not Mega or Leonardo compatible). - Adafruit Wave Shield - Speaker attached to Wave Shield output - Battery for portable use If using the voice pitch changer, you will also need: - Adafruit Microphone Breakout - 10K potentiometer for setting pitch (or hardcode in sketch) If using the WAV playback, you will also need: - SD card - Keypad, buttons or other sensor(s) for triggering sounds Software requirements: - WaveHC library for Arduino - Demo WAV files on FAT-formatted SD card This example sketch uses a 3x4 keypad for triggering sounds...but with some changes could be adapted to use several discrete buttons, Hall effect sensors, force-sensing resistors (FSRs), I2C keypads, etc. (or if you just want the voice effect, no buttons at all). Connections: - 3.3V to mic amp+, 1 leg of potentiometer and Arduino AREF pin - GND to mic amp-, opposite leg of potentiometer - Analog pin 0 to mic amp output - Analog pin 1 to center tap of potentiometer - Wave Shield output to speaker or amplifier - Matrix is wired to pins A2, A3, A4, A5 (rows) and 6, 7, 8 (columns) - Wave shield is assumed wired as in product tutorial Potentiometer sets playback pitch. Pitch adjustment does NOT work in realtime -- audio sampling requires 100% of the ADC. Pitch setting is read at startup (or reset) and after a WAV finishes playing. POINT SPEAKER AWAY FROM MIC to avoid feedback. Written by Adafruit industries, with portions adapted from the 'PiSpeakHC' sketch included with WaveHC library. */ #include #include SdReader card; // This object holds the information for the card FatVolume vol; // This holds the information for the partition on the card FatReader root; // This holds the information for the volumes root directory FatReader file; // This object represent the WAV file for a pi digit or period WaveHC wave; // This is the only wave (audio) object, -- we only play one at a time #define error(msg) error_P(PSTR(msg)) // Macro allows error messages in flash memory #define ADC_CHANNEL 0 // Microphone on Analog pin 0 // Wave shield DAC: digital pins 2, 3, 4, 5 #define DAC_CS_PORT PORTD #define DAC_CS PORTD2 #define DAC_CLK_PORT PORTD #define DAC_CLK PORTD3 #define DAC_DI_PORT PORTD #define DAC_DI PORTD4 #define DAC_LATCH_PORT PORTD #define DAC_LATCH PORTD5 uint16_t in = 0, out = 0, xf = 0, nSamples; // Audio sample counters uint8_t adc_save; // Default ADC mode // WaveHC didn't declare it's working buffers private or static, // so we can be sneaky and borrow the same RAM for audio sampling! extern uint8_t buffer1[PLAYBUFFLEN], // Audio sample LSB buffer2[PLAYBUFFLEN]; // Audio sample MSB #define XFADE 16 // Number of samples for cross-fade #define MAX_SAMPLES (PLAYBUFFLEN - XFADE) // Remaining available audio samples // Keypad information: uint8_t rows[] = { A2, A3, A4, A5 }, // Keypad rows connect to these pins cols[] = { 6, 7, 8, 9 }, // Keypad columns connect to these pins r = 0, // Current row being examined prev = 255, // Previous key reading (or 255 if none) count = 0; // Counter for button debouncing #define DEBOUNCE 10 // Number of iterations before button 'takes' // Keypad/WAV information. Number of elements here should match the // number of keypad rows times the number of columns, plus one: const char *sound[] = { "Crashing" , "Damaged", "InFlight" , "PowerUp" , // Row 1 = Darth Vader sounds "Brkdown3" , "Brkdown2" , "Brkdown" , "PowerUp" , // Row 2 = Godzilla sounds "Landing", "drain" , "Shutdown" , "PowerUp" , // Row 3 = Dug the dog sounds "Silent", "TakeOff", "Vortex" , "PowerUp" , // Row 4 = Cartoon/SFX sound "PowerUp" }; // Extra item = boot sound //////////////////////////////////// SETUP void setup() { uint8_t i; Serial.begin(9600); // The WaveHC library normally initializes the DAC pins...but only after // an SD card is detected and a valid file is passed. Need to init the // pins manually here so that voice FX works even without a card. pinMode(2, OUTPUT); // Chip select pinMode(3, OUTPUT); // Serial clock pinMode(4, OUTPUT); // Serial data pinMode(5, OUTPUT); // Latch digitalWrite(2, HIGH); // Set chip select high // Init SD library, show root directory. Note that errors are displayed // but NOT regarded as fatal -- the program will continue with voice FX! if(!card.init()) SerialPrint_P("Card init. failed!"); else if(!vol.init(card)) SerialPrint_P("No partition!"); else if(!root.openRoot(vol)) SerialPrint_P("Couldn't open dir"); else { PgmPrintln("Files found:"); root.ls(); // Play startup sound (last file in array). playfile(sizeof(sound) / sizeof(sound[0]) - 1); } // Optional, but may make sampling and playback a little smoother: // Disable Timer0 interrupt. This means delay(), millis() etc. won't // work. Comment this out if you really, really need those functions. TIMSK0 = 0; // Set up Analog-to-Digital converter: analogReference(EXTERNAL); // 3.3V to AREF adc_save = ADCSRA; // Save ADC setting for restore later // Set keypad rows to outputs, set to HIGH logic level: for(i=0; i pinMode(rows[i], OUTPUT); digitalWrite(rows[i], HIGH); } // Set keypad columns to inputs, enable pull-up resistors: for(i=0; i pinMode(cols[i], INPUT); digitalWrite(cols[i], HIGH); } while(wave.isplaying); // Wait for startup sound to finish... startPitchShift(); // and start the pitch-shift mode by default. } //////////////////////////////////// LOOP // As written here, the loop function scans a keypad to triggers sounds // (stopping and restarting the voice effect as needed). If all you need // is a couple of buttons, it may be easier to tear this out and start // over with some simple digitalRead() calls. void loop() { uint8_t c, button; // Set current row to LOW logic state... digitalWrite(rows[r], LOW); // ...then examine column buttons for a match... for(c=0; c if(digitalRead(cols[c]) == LOW) { // First match. button = r * sizeof(cols) + c; // Get button index. if(button == prev) { // Same button as before? if(++count >= DEBOUNCE) { // Yes. Held beyond debounce threshold? if(wave.isplaying) wave.stop(); // Stop current WAV (if any) else stopPitchShift(); // or stop voice effect playfile(button); // and play new sound. while(digitalRead(cols[c]) == LOW); // Wait for button release. prev = 255; // Reset debounce values. count = 0; } } else { // Not same button as prior pass. prev = button; // Record new button and count = 0; // restart debounce counter. } } } // Restore current row to HIGH logic state and advance row counter... digitalWrite(rows[r], HIGH); if(++r >= sizeof(rows)) { // If last row scanned... r = 0; // Reset row counter // If no new sounds have been triggered at this point, and if the // pitch-shifter is not running, re-start it... if(!wave.isplaying && !(TIMSK2 & _BV(TOIE2))) startPitchShift(); } } //////////////////////////////////// HELPERS // Open and start playing a WAV file void playfile(int idx) { char filename[13]; (void)sprintf(filename,"%s.wav", sound[idx]); Serial.print("File: "); Serial.println(filename); if(!file.open(root, filename)) { PgmPrint("Couldn't open file "); Serial.print(filename); return; } if(!wave.create(file)) { PgmPrintln("Not a valid WAV"); return; } wave.play(); } //////////////////////////////////// PITCH-SHIFT CODE void startPitchShift() { // Read analog pitch setting before starting audio sampling: int pitch = analogRead(1); Serial.print("Pitch: "); Serial.println(pitch); // Right now the sketch just uses a fixed sound buffer length of // 128 samples. It may be the case that the buffer length should // vary with pitch for better results...further experimentation // is required here. nSamples = 128; //nSamples = F_CPU / 3200 / OCR2A; // ??? //if(nSamples > MAX_SAMPLES) nSamples = MAX_SAMPLES; //else if(nSamples < (XFADE * 2)) nSamples = XFADE * 2; memset(buffer1, 0, nSamples + XFADE); // Clear sample buffers memset(buffer2, 2, nSamples + XFADE); // (set all samples to 512) // WaveHC library already defines a Timer1 interrupt handler. Since we // want to use the stock library and not require a special fork, Timer2 // is used for a sample-playing interrupt here. As it's only an 8-bit // timer, a sizeable prescaler is used (32:1) to generate intervals // spanning the desired range (~4.8 KHz to ~19 KHz, or +/- 1 octave // from the sampling frequency). This does limit the available number // of speed 'steps' in between (about 79 total), but seems enough. TCCR2A = _BV(WGM21) | _BV(WGM20); // Mode 7 (fast PWM), OC2 disconnected TCCR2B = _BV(WGM22) | _BV(CS21) | _BV(CS20); // 32:1 prescale OCR2A = map(pitch, 0, 1023, F_CPU / 32 / (9615 / 2), // Lowest pitch = -1 octave F_CPU / 32 / (9615 * 2)); // Highest pitch = +1 octave // Start up ADC in free-run mode for audio sampling: DIDR0 |= _BV(ADC0D); // Disable digital input buffer on ADC0 ADMUX = ADC_CHANNEL; // Channel sel, right-adj, AREF to 3.3V regulator ADCSRB = 0; // Free-run mode ADCSRA = _BV(ADEN) | // Enable ADC _BV(ADSC) | // Start conversions _BV(ADATE) | // Auto-trigger enable _BV(ADIE) | // Interrupt enable _BV(ADPS2) | // 128:1 prescale... _BV(ADPS1) | // ...yields 125 KHz ADC clock... _BV(ADPS0); // ...13 cycles/conversion = ~9615 Hz TIMSK2 |= _BV(TOIE2); // Enable Timer2 overflow interrupt sei(); // Enable interrupts } void stopPitchShift() { ADCSRA = adc_save; // Disable ADC interrupt and allow normal use TIMSK2 = 0; // Disable Timer2 Interrupt } ISR(ADC_vect, ISR_BLOCK) { // ADC conversion complete // Save old sample from 'in' position to xfade buffer: buffer1[nSamples + xf] = buffer1[in]; buffer2[nSamples + xf] = buffer2[in]; if(++xf >= XFADE) xf = 0; // Store new value in sample buffers: buffer1[in] = ADCL; // MUST read ADCL first! buffer2[in] = ADCH; if(++in >= nSamples) in = 0; } ISR(TIMER2_OVF_vect) { // Playback interrupt uint16_t s; uint8_t w, inv, hi, lo, bit; int o2, i2, pos; // Cross fade around circular buffer 'seam'. if((o2 = (int)out) == (i2 = (int)in)) { // Sample positions coincide. Use cross-fade buffer data directly. pos = nSamples + xf; hi = (buffer2[pos] << 2) | (buffer1[pos] >> 6); // Expand 10-bit data lo = (buffer1[pos] << 2) | buffer2[pos]; // to 12 bits } if((o2 < i2) && (o2 > (i2 - XFADE))) { // Output sample is close to end of input samples. Cross-fade to // avoid click. The shift operations here assume that XFADE is 16; // will need adjustment if that changes. w = in - out; // Weight of sample (1-n) inv = XFADE - w; // Weight of xfade pos = nSamples + ((inv + xf) % XFADE); s = ((buffer2[out] << 8) | buffer1[out]) * w + ((buffer2[pos] << 8) | buffer1[pos]) * inv; hi = s >> 10; // Shift 14 bit result lo = s >> 2; // down to 12 bits } else if (o2 > (i2 + nSamples - XFADE)) { // More cross-fade condition w = in + nSamples - out; inv = XFADE - w; pos = nSamples + ((inv + xf) % XFADE); s = ((buffer2[out] << 8) | buffer1[out]) * w + ((buffer2[pos] << 8) | buffer1[pos]) * inv; hi = s >> 10; // Shift 14 bit result lo = s >> 2; // down to 12 bits } else { // Input and output counters don't coincide -- just use sample directly. hi = (buffer2[out] << 2) | (buffer1[out] >> 6); // Expand 10-bit data lo = (buffer1[out] << 2) | buffer2[out]; // to 12 bits } // Might be possible to tweak 'hi' and 'lo' at this point to achieve // different voice modulations -- robot effect, etc.? DAC_CS_PORT &= ~_BV(DAC_CS); // Select DAC // Clock out 4 bits DAC config (not in loop because it's constant) DAC_DI_PORT &= ~_BV(DAC_DI); // 0 = Select DAC A, unbuffered DAC_CLK_PORT |= _BV(DAC_CLK); DAC_CLK_PORT &= ~_BV(DAC_CLK); DAC_CLK_PORT |= _BV(DAC_CLK); DAC_CLK_PORT &= ~_BV(DAC_CLK); DAC_DI_PORT |= _BV(DAC_DI); // 1X gain, enable = 1 DAC_CLK_PORT |= _BV(DAC_CLK); DAC_CLK_PORT &= ~_BV(DAC_CLK); DAC_CLK_PORT |= _BV(DAC_CLK); DAC_CLK_PORT &= ~_BV(DAC_CLK); for(bit=0x08; bit; bit>>=1) { // Clock out first 4 bits of data if(hi & bit) DAC_DI_PORT |= _BV(DAC_DI); else DAC_DI_PORT &= ~_BV(DAC_DI); DAC_CLK_PORT |= _BV(DAC_CLK); DAC_CLK_PORT &= ~_BV(DAC_CLK); } for(bit=0x80; bit; bit>>=1) { // Clock out last 8 bits of data if(lo & bit) DAC_DI_PORT |= _BV(DAC_DI); else DAC_DI_PORT &= ~_BV(DAC_DI); DAC_CLK_PORT |= _BV(DAC_CLK); DAC_CLK_PORT &= ~_BV(DAC_CLK); } DAC_CS_PORT |= _BV(DAC_CS); // Unselect DAC if(++out >= nSamples) out = 0; } CODE I FOUND FOR IR  ClyonPumpkin That I want to integrate in above   /* * Text-to-speech example to speak the first n digits of pi. * The number is stored in flash, each digit is spoken one at a time. */ #include #include #include SdReader card;    // This object holds the information for the card FatVolume vol;    // This holds the information for the partition on the card FatReader root;   // This holds the information for the volumes root directory FatReader file;   // This object represent the WAV file for a pi digit or period WaveHC wave;      // This is the only wave (audio) object, since we will only play one at a time char eyesound[13]="eye2.wav"; int mute = 0; /* * Define macro to put error messages in flash memory */ #define error(msg) error_P(PSTR(msg)) // IR Remote code int RECV_PIN = 9;  // pin 11 used by SD card interface so select pin 9 for IR IRrecv irrecv(RECV_PIN); decode_results results; long lasttime=0, lastcode=0, timediff=0; //////////////////////////////////// SETUP void setup() {   // set up Serial library at 9600 bps   Serial.begin(9600);               if (!card.init()) {     error("Card init. failed!");   }   if (!vol.init(card)) {     error("No partition!");   }   if (!root.openRoot(vol)) {     error("Couldn't open dir");   }   irrecv.enableIRIn(); // Start the IR receiver } /////////////////////////////////// LOOP void loop() {   if(mute == 0) playcomplete(eyesound);   // check for keypress happened   if (irrecv.decode(&results;)) {      Serial.println(results.value, HEX);      switch (results.value) {        case 0x83228B74:    // 1          playcomplete("command.wav");          break;        case 0x83228F70:    // 2          playcomplete("entertan.wav");          break;        case 0x8322906F:    // 3          playcomplete("extermin.wav");          break;        case 0x83228A75:    // 4          playcomplete("leader.wav");          break;        case 0x8322847B:    // 5          playcomplete("survivor.wav");          break;         case 0x83227887:    // 6          playcomplete("atention.wav");          break;        case 0x8322629D:    // vol up          mute = 0;         // mute off          break;         case 0x83226E91:    // mute          { Serial.println("mute detected");            timediff=millis()-lasttime;            Serial.println(timediff);            if(lastcode!=results.value || (lastcode==results.value && (timediff>1600)) ) {               if( mute == 0 ) { // is mute off?                  Serial.println("toggle off to on");                  mute = 1;      // turn on                  // delay(1000);    // wait a bit for debounce                  break;                 }               if( mute == 1 ) { // is mute on?                  mute = 0;      // turn off                  Serial.println("toggle on to off");                  break;                 }              } // end if             break;           } // end case        } // end switch      lastcode = results.value;      lasttime = millis();      irrecv.resume();   // Receive the next value   } } /////////////////////////////////// HELPERS /* * print error message and halt */ void error_P(const char *str) {   PgmPrint("Error: ");   SerialPrint_P(str);   sdErrorCheck();   while(1); } /* * print error message and halt if SD I/O error */ void sdErrorCheck(void) {   if (!card.errorCode()) return;   PgmPrint("\r\nSD I/O error: ");   Serial.print(card.errorCode(), HEX);   PgmPrint(", ");   Serial.println(card.errorData(), HEX);   while(1); } /* * Play a file and wait for it to complete */ void playcomplete(char *name) {   playfile(name);   while (wave.isplaying);     // see if an error occurred while playing   sdErrorCheck(); } /* * Open and start playing a WAV file */ void playfile(char *name) {   if (wave.isplaying) {// already playing something, so stop it!     wave.stop(); // stop it   }   if (!file.open(root, name)) {     PgmPrintln("Couldn't open file ");     Serial.print(name);     return;   }   if (!wave.create(file)) {     PgmPrintln("Not a valid WAV");     return;   }   // ok time to play!   wave.play(); }

Posted by SithLordIII 4 years ago